const cloud = require('@cloudbase/node-sdk');

// 初始化云开发SDK
const app = cloud.init({
  env: cloud.SYMBOL_CURRENT_ENV
});
const db = app.database();
const _ = db.command;

// 文本转换记录集合
const COLLECTION_NAME = 'text_conversion_records';

/**
 * 保存转换记录
 * @param {Object} event - 请求参数
 * @param {string} event.input - 输入文本
 * @param {string} event.output - 输出文本
 * @param {Object} event.options - 转换选项
 */
async function saveRecord(event) {
  try {
    // 验证必要参数
    if (!event.input || !event.output) {
      return {
        code: 400,
        message: '缺少必要参数'
      };
    }

    // 创建记录
    const record = {
      input: event.input,
      output: event.output,
      options: event.options || {},
      userId: event.userId || 'anonymous',
      createTime: new Date()
    };

    // 保存到数据库
    const result = await db.collection(COLLECTION_NAME).add(record);

    return {
      code: 200,
      message: '保存成功',
      data: {
        id: result.id
      }
    };
  } catch (error) {
    console.error('保存记录失败:', error);
    return {
      code: 500,
      message: '服务器错误',
      error: error.message
    };
  }
}

/**
 * 获取用户的转换记录
 * @param {Object} event - 请求参数
 * @param {string} event.userId - 用户ID
 * @param {number} event.limit - 返回记录数量限制
 * @param {number} event.offset - 分页偏移量
 */
async function getRecords(event) {
  try {
    const userId = event.userId || 'anonymous';
    const limit = parseInt(event.limit) || 20;
    const offset = parseInt(event.offset) || 0;

    // 查询记录
    const { data } = await db.collection(COLLECTION_NAME)
      .where({
        userId: userId
      })
      .orderBy('createTime', 'desc')
      .skip(offset)
      .limit(limit)
      .get();

    return {
      code: 200,
      message: '获取成功',
      data: data
    };
  } catch (error) {
    console.error('获取记录失败:', error);
    return {
      code: 500,
      message: '服务器错误',
      error: error.message
    };
  }
}

/**
 * 删除转换记录
 * @param {Object} event - 请求参数
 * @param {string} event.recordId - 记录ID
 * @param {string} event.userId - 用户ID
 */
async function deleteRecord(event) {
  try {
    if (!event.recordId) {
      return {
        code: 400,
        message: '缺少记录ID'
      };
    }

    const userId = event.userId || 'anonymous';

    // 删除记录
    await db.collection(COLLECTION_NAME)
      .where({
        _id: event.recordId,
        userId: userId
      })
      .remove();

    return {
      code: 200,
      message: '删除成功'
    };
  } catch (error) {
    console.error('删除记录失败:', error);
    return {
      code: 500,
      message: '服务器错误',
      error: error.message
    };
  }
}

/**
 * 清空用户的所有转换记录
 * @param {Object} event - 请求参数
 * @param {string} event.userId - 用户ID
 */
async function clearRecords(event) {
  try {
    const userId = event.userId || 'anonymous';

    // 删除用户的所有记录
    await db.collection(COLLECTION_NAME)
      .where({
        userId: userId
      })
      .remove();

    return {
      code: 200,
      message: '清空成功'
    };
  } catch (error) {
    console.error('清空记录失败:', error);
    return {
      code: 500,
      message: '服务器错误',
      error: error.message
    };
  }
}

// 云函数入口
exports.main = async (event, context) => {
  // 获取操作类型
  const { action } = event;

  // 根据操作类型调用对应的处理函数
  switch (action) {
    case 'save':
      return await saveRecord(event);
    case 'get':
      return await getRecords(event);
    case 'delete':
      return await deleteRecord(event);
    case 'clear':
      return await clearRecords(event);
    default:
      return {
        code: 400,
        message: '未知的操作类型'
      };
  }
};